終於到了登出功能,以為能夠一次成功的,殊不知又出現錯誤了:-(
Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
function Header(){
//--略
function signOut(){
firebase.auth().signOut().then(() => {
useNavigate('/')
}).catch((error) => {
console.log(error)
});
}
return(
<header className={menuToggle ? 'navbar open' : 'navbar'} >
//--略
<li>
<Link to="#" onClick={signOut}>登出</Link>
</li>
//--略
</header>
)
}
把函式直接寫入onColick裡面就可以解決上面出現的報錯問題。
function Header(){
return(
<header className={menuToggle ? 'navbar open' : 'navbar'} >
//--略
<li>
<Link to="#" onClick={()=>firebase.auth().signOut()}>登出</Link>
</li>
//--略
</header>
)
}
原因是這樣的…
//第一種方式 — 他是在點擊後直接執行函式
onClick={signOut}
onClick = function() {
firebase.auth().signOut()
}
//可以看做是
onClick = function() {
firebase.auth().signOut()
}
//第二種方式 — 式箭頭函式點擊後會去調用上面的函式
onClick = {() => this.signOut()}
//可以看做是
onClick = function() {
return function signOut() {
firebase.auth().signOut()
};
}